package com.sky.controller.admin;

/**
 * @PROJECT_NAME:sky-take-out
 * @NAME: OrderContyoller
 * @AUTHOR:$$
 * @Date:2023-08-21
 * @DESCRIPTION:
 **/

import com.sky.dto.OrdersCancelDTO;
import com.sky.dto.OrdersConfirmDTO;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.dto.OrdersRejectionDTO;
import com.sky.entity.Orders;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.OrderService;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 订单管理
 */
@RestController("adminOrderController")
@RequestMapping("/admin/order")
@Slf4j
@Api(tags = "订单管理接口")
public class OrderController {
  @Autowired
  private OrderService orderService;


  public Result<PageResult>conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO){
    PageResult pageResult =
            orderService.conditionSearch(ordersPageQueryDTO);
     return Result.success(pageResult);
  }

  /**
   * 各个状态的订单数量统计
   * @return
   */
  public Result<OrderStatisticsVO> statistics(){
    OrderStatisticsVO orderStatisticsVO = orderService.statistics();
    return Result.success(orderStatisticsVO);
  }

  /**
   * 订单详情
   * @param id
   * @return
   */
  @GetMapping("/details/{id}")
  @ApiOperation("查询订单详情")
  public Result<OrderVO>details(@PathVariable("id")Long id){
    OrderVO orderVO = orderService.details(id);
    return Result.success(orderVO);
  }

  /**
   * 接单
   * @param ordersConfirmDTO
   * @return
   */
  @PutMapping("/confirm")
  @ApiOperation("接单")
  public Result confirm(@RequestBody OrdersConfirmDTO ordersConfirmDTO){
    orderService.confirm(ordersConfirmDTO);
    return Result.success();
  }

  /**
   * 拒单
   * @param ordersRejectionDTO
   * @return
   * @throws Exception
   */
  public Result rejection(@RequestBody OrdersRejectionDTO ordersRejectionDTO) throws Exception {
    orderService.reject (ordersRejectionDTO);
    return Result.success();
  }

  /**
   * 取消订单
   * @param ordersCancelDTO
   * @return
   * @throws Exception
   */
  @PutMapping("/cancel")
  @ApiOperation("取消订单")
  public Result cancel(@RequestBody OrdersCancelDTO ordersCancelDTO) throws Exception{
    orderService.cancel(ordersCancelDTO);
    return Result.success();

  }

  /**
   * 派送订单
   * @param id
   * @return
   */
  @PutMapping("/dilivery/{id}")
  @ApiOperation("派送订单")
  public Result delivery(@PathVariable("id") Long id) {
    orderService.delivery(id);
    return Result.success();

  }

  /**
   * 完成订单
   * @param id
   */
  @PutMapping("/comlete/{id}")
  @ApiOperation("完成订单")
   public Result comlete(@PathVariable("id") Long id){
    orderService.comlete(id);
    return Result.success();

   }

}
